package org.Yiran.timetale_re.entity;

import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.MobCategory;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
import org.Yiran.timetale_re.Timetale_re;
import org.Yiran.timetale_re.entity.rune.FlyingRuneEntity;
import org.Yiran.timetale_re.entity.rune.ThrowableRuneEntity;

/**
 * 实体注册类
 * <p>
 * 该类负责注册模组中使用的所有自定义实体类型。
 * 使用DeferredRegister系统来延迟注册实体，确保在正确的时机进行注册。
 * </p>
 */
public class EntityRegister {
    
    // ============================== 实体注册器 ==============================
    
    /**
     * 实体类型的延迟注册器
     * <p>
     * 使用Forge的DeferredRegister系统来注册实体类型
     * </p>
     */
    public static final DeferredRegister<EntityType<?>> ENTITIES =
            DeferredRegister.create(ForgeRegistries.ENTITY_TYPES, Timetale_re.MODID);

    // ============================== 飞行符文实体 ==============================
    
    /**
     * 飞行符文实体类型注册
     * <p>
     * 注册飞行符文实体，用于表现飞行中的符文效果
     * </p>
     */
    public static final RegistryObject<EntityType<FlyingRuneEntity>> FLYING_RUNE =
            ENTITIES.register("flying_rune",
                    () -> EntityType.Builder.<FlyingRuneEntity>of(FlyingRuneEntity::new, MobCategory.MISC)
                            .sized(0.25f, 0.25f)                     // 设置实体大小为0.25x0.25
                            .clientTrackingRange(8)                  // 设置客户端追踪范围为8个区块
                            .updateInterval(1)                       // 设置更新间隔为1tick
                            .build("flying_rune"));                  // 构建实体类型

    // ============================== 坐姿实体 ==============================
    
    /**
     * 坐姿实体类型注册
     * <p>
     * 注册坐姿实体，用于实现玩家坐在椅子上的功能
     * </p>
     */
    public static final RegistryObject<EntityType<SitEntity>> SIT_ENTITY =
            ENTITIES.register("sit_entity",
                    () -> EntityType.Builder.<SitEntity>of(SitEntity::new, MobCategory.MISC)
                            .sized(0.1f, 0.1f)                       // 设置实体大小为0.1x0.1
                            .clientTrackingRange(10)                 // 设置客户端追踪范围为10个区块
                            .updateInterval(1)                       // 设置更新间隔为1tick
                            .build("sit_entity"));                   // 构建实体类型

    // ============================== 可投掷符文实体 ==============================
    
    /**
     * 可投掷符文实体类型注册
     * <p>
     * 注册可投掷符文实体，用于表现投掷出去的符文
     * </p>
     */
    public static final RegistryObject<EntityType<ThrowableRuneEntity>> THROWABLE_RUNE =
            ENTITIES.register("throwable_rune",
                    () -> EntityType.Builder.<ThrowableRuneEntity>of(ThrowableRuneEntity::new, MobCategory.MISC)
                            .sized(0.25f, 0.25f)                     // 设置实体大小为0.25x0.25
                            .clientTrackingRange(8)                  // 设置客户端追踪范围为8个区块
                            .updateInterval(1)                       // 设置更新间隔为1tick
                            .build("throwable_rune"));               // 构建实体类型
}